package com.bm.common;

import com.bm.dao.CollegeDao;
import com.bm.util.FileUtil;
import com.bm.util.JdbcUtil;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Set;

/**
 * 计划招生数据清洗工具
 */

public class PlannedStudentClean {
    /**
     * 清洗数据
     */
    public void cleanFile(){
        System.out.println("--开始计划招生数据清洗--");
        CollegeDao collegeDao = new CollegeDao();
        Set<String> majorNameSet = collegeDao.selectMajor();
        Set<String> collegeNameSet = collegeDao.selectCollege();
        //确定CSV文件路径
        ArrayList<String[]> list = FileUtil.CSV2Array("D:\\项目一数据\\数据\\脏数据\\招生计划-yi.csv");
        StringBuilder sb = new StringBuilder();//创建字符串拼接工具
        int row = 1;
        int col = 1;
        for (String[] line:list) {//循环每一行数据
            for (String word : line) {//循环每一行中的每个字段数据
                word = word.replaceAll("\\s","");//替换字符串中所有的空格
                if (word.length() == 0 ) {//判断字符串长度，0，数据缺失
                    sb.append(row).append("-").append(col).append(":数据缺失\n");//录数据缺失的行号
                }
                col++;//读取下个字段，列自增
            }

            /*String collegeName = line[0];
            if (!collegeNameSet.contains(collegeName)){
                sb.append(row).append(" - ").append(col).append(" :学校名称不存在\n");
            }

            String majorName = line[0];
            if (!majorNameSet.contains(majorName)){
                sb.append(row).append(" - ").append(col).append(" :学校名称不存在\n");
            }*/

            row++;//读取下个字段，hang自增
            col=1;//字段恢复到底一列
        }
        System.out.println(sb);//打印数据异常行号
    }

    /**
     * 写入数据库
     */
    public void writeDB(){
        System.out.println("--开始计划招生数据写入--");

        Connection conn = null;//申明数据库连接对象
        Statement stmt = null;//申明数据库执行工具
        int row = 0;//数据库受影响行数

        StringBuilder sql = new StringBuilder();//申明SQL拼接工具
        sql.append("INSERT INTO `t_planed` VALUES");//INSERT语句的开头

        //读取清洗后的CSV文件，拼接成SQL批量插入语句
        ArrayList<String[]> list = FileUtil.CSV2Array("D:\\项目一数据\\数据\\脏数据\\招生计划.csv");
        for (String[] line:list) {//循环每一行数据
            sql.append("(NULL,");//一行的开始
            for (String word : line) {//循环每一行中的每个字段数据
                word = word.replaceAll("\\s", "");//替换字符串中所有的空格
                sql.append("'").append(word).append("'").append(",");//拼接每个字段
            }//一行中的每个字段，循环结束
            sql.deleteCharAt(sql.length() - 1);//去掉最后一个字符，多余的逗号
            sql.append(") ,");//一行的结束
        }
        sql.deleteCharAt(sql.length()-1);//去掉最后一个字符，多余的逗号
        //System.out.println(sql);
        try {
            conn = JdbcUtil.getConnection();//获取数据库连接对象
            stmt = conn.createStatement();//获取执行SQL的工具
            row = stmt.executeUpdate(sql.toString());//执行拼接的SQL
            System.out.println("受影响行数"+row);//打印受影响行数（插入多少条数据）
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            JdbcUtil.release(conn,stmt);//回收资源
        }
    }
}
